package com.origin.chaos.security.serivce;

import com.alibaba.fastjson.JSONObject;
import com.origin.chaos.common.bean.vo.Result;
import com.origin.chaos.security.bean.LoginUser;
import com.origin.chaos.security.bean.vo.*;
import org.springframework.lang.Nullable;

/**
 * @author: tao.ding
 * @date 2021-07-16
 */
public interface IUserService {

    /**
     * 给指定邮箱发送注册验证码
     *
     * @param email 用户注册的邮箱
     * @return 返回还需要多长时间才可以发送验证码
     */
    Result<Long> sendRegisterCode(String email);

    /**
     * 给指定邮箱发送重置密码验证码
     *
     * @param email 用户注册的邮箱
     * @return 返回还需要多长时间才可以发送验证码
     */
    Result<Long> sendResetPsdCode(String email);

    /**
     * 注册
     *
     * @param vo
     * @return
     */
    UserInfoVo register(RegisterVo vo);

    /**
     * 重置密码
     *
     * @param vo
     * @return
     */
    UserInfoVo resetPsd(ResetPsdVo vo);

    /**
     * 修改信息
     *
     * @param vo
     * @return
     */
    UserInfoVo changeInfo(ChangeInfoVo vo);

    /**
     * 登录
     *
     * @param vo
     * @return token
     */
    String login(LoginVo vo);

    /**
     * 获取当前登录用户信息
     *
     * @return
     */
    UserInfoVo getUserInfo();

    /**
     * 退出登录,清除登录状态
     */
    void logout();

    /**
     * 根据token获取登录用户
     *
     * @param token
     * @return
     */
    @Nullable
    LoginUser getLoginUserByToken(String token);

    /**
     * 查看当前系统用户信息
     *
     * @return
     */
    JSONObject manageUserInfo();

    /**
     * 根据用户ID查询用户可公开信息
     *
     * @param id
     * @return
     */
    UserOpenInfoVo getUserOpenInfoById(long id);

}
